package fileshow

import (
	"gitlab.local/DO-module/new-filemanage-module/src/core/fileoperate"
	"gitlab.local/TerraMaster/tos-modules/database"
	//"gitlab.local/TerraMaster/tos-modules/core/acl"
	"gitlab.local/TerraMaster/tos-modules/core/acl"
)

// 展示栏
type FileShow struct {
	foldersInfo  []FoldersInfo
	dbGetter     database.DbGetter
	fOptGetter   fileoperate.Getter
	aclGetter    acl.FolderAttrService
	uploadStatus string //考虑到初始化默认值，""：没有初始化，"1":重命名,"2"：覆盖,"3"：跳过
}

// 文件信息
type FoldersInfo struct {
	Name              string        `json:"name"`                         //名称
	Path              string        `json:"path"`                         //路径
	Volume            string        `json:"volume"`                       //卷
	VolumePath        string        `json:"volume_path"`                  //卷+路径
	Icon              string        `json:"icon,omitempty"`               //图标路径
	ATime             string        `json:"a_time"`                       //访问时间
	MTime             string        `json:"m_time"`                       //修改时间
	CTime             string        `json:"c_time"`                       //创建时间
	FType             string        `json:"f_type"`                       //类型(folder、file、app_link、oexe、music、video、image)
	Size              int64         `json:"size"`                         //字节B
	SizeFriendly      string        `json:"size_friendly"`                //文件大小
	Users             []UserAttrs   `json:"users,omitempty"`              //所有者
	Groups            []Acl         `json:"groups,omitempty"`             //所属组
	Owner             string        `json:"owner,omitempty"`              //所有者
	OwnerId           string        `json:"owner_id,omitempty"`           //所有者id
	Group             string        `json:"group,omitempty"`              //所属组
	GroupId           string        `json:"group_id,omitempty"`           //所属组id
	Link              string        `json:"link,omitempty"`               //连接地址(只有为appLink类型的文件才有此属性)
	Permission        string        `json:"permission"`                   //用户拥有权限(rwx)
	IsHome            int8          `json:"is_home,omitempty"`            //是否home目录,1是，2否
	FRealType         string        `json:"f_real_type"`                  //文件真实类型
	IsCollect         bool          `json:"is_collect"`                   //是否收藏
	IsShare           bool          `json:"is_share"`                     //是否分享
	Level             int           `json:"level"`                        //层级
	Hidden            bool          `json:"hidden"`                       //是否隐藏
	FileQuantity      int           `json:"file_quantity"`                //文件夹下总文件数量
	FolderQuantity    int           `json:"folder_quantity"`              //文件夹下总文件夹数量
	FileSystem        string        `json:"file_system"`                  //文件系统格式
	ChildFoldersInfo  []FoldersInfo `json:"child_folders_info,omitempty"` //子文件信息
	IsMount           int           `json:"is_mount"`                     //是否挂载
	IsEncryptedFolder int           `json:"is_encrypted_folder"`          //是否是加密文件夹
}

// UserAttrs 用户权限
type UserAttrs struct {
	Acl
	Groups   []string `json:"groups"`    //用户属于哪几个组
	GroupAcl string   `json:"group_acl"` //来自用户组的权限
}

// Acl 权限
type Acl struct {
	Type              string `json:"type"`                     //user|group
	Name              string `json:"name"`                     //user|group 名
	AclType           int    `json:"acl_type"`                 //acl模式
	Permission        string `json:"permission"`               //权限(rwx)
	Effective         string `json:"effective"`                //真实权限(rwx)
	InheritedFromPath string `json:"inherited_from_path"`      //继承自目录
	IsFirstAdmin      bool   `json:"is_first_admin,omitempty"` // use for share folder
}

type Getter interface {
}

func New(db database.DbGetter,
	aclService acl.FolderAttrService,
	fOptGetter fileoperate.Getter,
) *FileShow {
	return &FileShow{
		foldersInfo: []FoldersInfo{},
		fOptGetter:  fOptGetter,
		aclGetter:   aclService,
	}
}
